#define Max 200000
#define INVAILD -1

typedef struct {
    int value[Max];
    int count;
} RandomizedSet;


RandomizedSet* randomizedSetCreate() {
    RandomizedSet * obj=(RandomizedSet *)malloc(sizeof(RandomizedSet));
    memset(obj->value,0,sizeof(int)*Max);
    return obj;
}

bool randomizedSetInsert(RandomizedSet* obj, int val) {
    int cnt=obj->count;
    if(cnt==0)
    {
        obj->value[cnt++]=val;
        obj->count=cnt;
    }
    else
    {
        for(int i=0;i<cnt;i++)
        {
            if(obj->value[i]==val)
                return false;
        }
    obj->value[cnt++]=val;
    obj->count=cnt;
    }
    return true;
}

bool randomizedSetRemove(RandomizedSet* obj, int val) {
    int index=INVAILD;
    int cnt=obj->count;
    if(cnt==0)
        return false;
    else
    {
        for(int i=0;i<cnt;i++)
        {
            if(obj->value[i]==val)
            {
                index=i;
                break;
            }
        }
        if(index==INVAILD)  return false;
        for(int i=index;i<cnt-1;i++)
        {
            int temp=obj->value[i+1];
            obj->value[i]=temp;
        }
        cnt--;
        obj->count=cnt;
        return true;
    }
}

int randomizedSetGetRandom(RandomizedSet* obj) {
    int cnt=obj->count;
    int n=rand()%cnt;
    return obj->value[n];
}

void randomizedSetFree(RandomizedSet* obj) {
    free(obj);
}